﻿using System;
using System.Windows;
using System.Windows.Controls;
using INSAwarsWPF.Exceptions;

namespace INSAwarsWPF
{
    /** Fenêtre de choix de joueurs et de civilisation */
    public partial class MenuView : Window
    {
        /** Liste des noms des joueurs */
        public string[] ListNoms {get; set;}
        /** Tableau des civilisations choisies par le créateur, sous forme d'index de ComboBox */
        public int[] TabIndexCiv { get; set; }

        /** Vrai ssi l'utilisateur a cliqué pour créer la partie */
        public bool ResultOk { get; private set; }

        /** Construit une nouvelle fenêtre de choix */
        public MenuView()
        {
            ListNoms = new string[4];
            TabIndexCiv = new int[4];
            InitializeComponent();
            DataContext = this;
            ResultOk = false;
        }

        /** S'exécute quand on change la sélection de la ComboBox qui permet de choisir la taille de la carte.
         * Met à jour les différents champs en conséquence. (2 joueurs seulement sur une petite carte, 4 max sur une grande) */
        private void comboBoxTaille_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
           
            int taille = comboBoxTaille.SelectedIndex;
            switch (taille)
            {
                case 0:
                    comboBoxNbJoueurs.SelectedIndex = 0;
                    comboBoxNbJoueurs.IsEnabled = false;
                    break;
                case 1:
                    comboBoxNbJoueurs.IsEnabled = true;
                    break;
            }
        }

        /** S'exécute quand on change la sélection de la ComboBox qui permet de choisir le nombre de joueurs.
         * Met à jour les différents champs en conséquence. */
        private void comboBoxNbJoueurs_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            int taille = comboBoxNbJoueurs.SelectedIndex;
            switch (taille)
            {
                case 0:
                    // listJoueurs update
                    ListNoms[2] = "";
                    //TabIndexCiv[2] = 0;
                    ListNoms[3] = "";
                    //TabIndexCiv[3] = 0;

                    // J3 update
                    labelJ3.IsEnabled = false;
                    textBoxNom3.IsEnabled = false;
                    textBoxNom3.Clear();
                    comboBoxCivi3.SelectedIndex = 0;
                    comboBoxCivi3.IsEnabled = false;

                    // J4 update
                    labelJ4.IsEnabled = false;
                    textBoxNom4.IsEnabled = false;
                    textBoxNom4.Clear();
                    comboBoxCivi4.SelectedIndex = 0;
                    comboBoxCivi4.IsEnabled = false;

                    break;

                case 1:
                    // listJoueurs update
                    ListNoms[3] = "";
                    //ListCivs[3] = "";

                    labelJ3.IsEnabled = true;
                    textBoxNom3.IsEnabled = true;
                    comboBoxCivi3.IsEnabled = true;

                    labelJ4.IsEnabled = false;
                    textBoxNom4.IsEnabled = false;
                    textBoxNom4.Clear();
                    comboBoxCivi4.SelectedIndex = 0;
                    comboBoxCivi4.IsEnabled = false;

                    break;

                case 2:
                    labelJ3.IsEnabled = true;
                    textBoxNom3.IsEnabled = true;
                    comboBoxCivi3.IsEnabled = true;

                    labelJ4.IsEnabled = true;
                    textBoxNom4.IsEnabled = true;
                    comboBoxCivi4.IsEnabled = true;

                    break;
            }

        }

        /** S'exécute quand on valide la fenêtre. */
        private void buttonLancer_Click(object sender, RoutedEventArgs e)
        {
            bool i = true;
            bool j = true;
            ResultOk = true;
            try
            {
                if (textBoxNom1.Text == "") throw new NoNameException("Veuillez renseigner le nom des joueurs activés !");
                if (textBoxNom2.Text == "") throw new NoNameException("Veuillez renseigner le nom des joueurs activés !");
                if (textBoxNom3.Text == "" && labelJ3.IsEnabled) throw new NoNameException("Veuillez renseigner le nom des joueurs activés !");
                if (textBoxNom4.Text == "" && labelJ4.IsEnabled) throw new NoNameException("Veuillez renseigner le nom des joueurs activés !");

            } catch (NoNameException exc)
                {
                
                    MessageBox.Show(exc.Message);
                    i = false;
                    j = false;
                }
            if(j){
            try
            {

                if (textBoxNom1.Text == textBoxNom2.Text) throw new Exception();
                if (textBoxNom1.Text == textBoxNom3.Text && labelJ3.IsEnabled) throw new Exception();
                if (textBoxNom1.Text == textBoxNom4.Text && labelJ4.IsEnabled) throw new Exception();
                if (textBoxNom2.Text == textBoxNom3.Text && labelJ3.IsEnabled) throw new Exception();
                if (textBoxNom2.Text == textBoxNom4.Text && labelJ4.IsEnabled) throw new Exception();
                if (textBoxNom3.Text == textBoxNom4.Text && labelJ4.IsEnabled) throw new Exception();
            }
            catch(Exception)
            {
                MessageBox.Show("Erreur : deux joueurs différents ne peuvent porter deux noms identiques !");
                i=false;
            }
            }

             if(i)
                    this.Close();
        }
        /*
        private void Window_Initialized(object sender, System.EventArgs e)
        {
            ListNoms = new string[4];
            ListCivs = new string[4];
        }*/
    }
}
